package com.sixth.system.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sixth.core.annotation.OperaLog;
import com.sixth.core.entity.Dept;
import com.sixth.core.vo.R;
import com.sixth.system.service.DeptService;
import com.sixth.system.vo.DeptVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 科室管理控制器
 *
 * @author Stu YH
 * @date Created in 2024/8/14 15:35
 * @description 提供科室管理相关的API接口
 */
@Api(tags = "科室管理")
@RestController
@RequestMapping("/system/dept")
public class DeptController {
    @Autowired
    private DeptService deptService;

    /**
     * 查询所有科室数据
     * @return 所有科室数据列表
     */
    @ApiOperation(value = "查询所有科室数据", notes = "查询系统中的所有科室数据")
    @GetMapping("/list")
    public R<List<Dept>> list() {
        return deptService.selectAll();
    }

    /**
     * 分页查询科室数据
     * @param deptVo 查询条件
     * @return 分页查询结果
     */
    @ApiOperation(value = "分页查询科室数据", notes = "根据查询条件分页查询科室数据")
    @PostMapping("/listByPage")
    public R<IPage<Dept>> list(@RequestBody DeptVo deptVo) {
        return deptService.selectPage(deptVo);
    }

    /**
     * 根据科室ID查询科室信息
     * @param deptId 科室ID
     * @return 科室信息
     */
    @ApiOperation(value = "根据科室ID查询科室信息", notes = "根据提供的科室ID查询科室信息")
    @GetMapping("/getByDeptId/{deptId}")
    public R<Dept> getByDeptId(@PathVariable Integer deptId) {
        return deptService.getById(deptId);
    }

    /**
     * 根据科室ID删除科室信息
     * @param deptId 科室ID
     * @return 删除结果
     */
    @OperaLog(value = "删除科室", type = 3)
    @ApiOperation(value = "根据科室ID删除科室信息", notes = "根据提供的科室ID删除科室信息")
    @GetMapping("/delete/{deptId}")
    public R delete(@PathVariable Integer deptId) {
        return deptService.removeById(deptId);
    }

    /**
     * 批量删除科室
     * @param deptIds 科室ID数组
     * @return 删除结果
     */

    @ApiOperation(value = "批量删除科室", notes = "根据提供的科室ID数组批量删除科室")
    @OperaLog(value = "删除科室", type = 3)
    @GetMapping("/batchDelete")
    public R batchDelete(@RequestParam("deptIds") Long[] deptIds) {
        return deptService.batchDelete(deptIds);
    }

    /**
     * 添加或更新科室信息
     * @param dept 科室信息
     * @return 操作结果
     */
    @OperaLog(value = "添加或更新科室", type = 2)
    @ApiOperation(value = "添加或更新科室信息", notes = "添加或更新科室信息")
    @PostMapping("/add_update")
    public boolean add_update(@RequestBody Dept dept) {
        return deptService.add_update(dept);
    }
}
